C语言图书管理系统(文件操作)

您所在的位置:网站首页 C语言 图书管理系统 C语言图书管理系统(文件操作)

C语言图书管理系统(文件操作)

2024-03-01 10:42| 来源: 网络整理| 查看: 265

一、文件(两个)

book.txt

      科幻   1001001  未来战争         6          0       科幻   1001002 未来战争2         1         6       教科   1002102  语文教学         0        10       科幻   1002309  我在火星         5        21       科幻   1001003      三体            0        10       科幻   1001004  流浪地球         0         5       法律   1002001      制裁            0         5       法律   1002002  无罪之罚         0         5       法律   1002003      弹劾            0         6       法律   1002004 刑法的私塾      0         6       散文   1003001  湘行散记         0         2       散文   1003002  雅舍小品         0         2       小说   1004001  狂人日记         0        10       小说   1004002      追求            0         2

reader.txt

 104173101      张三         5         5   1001002   1001001   1001001   1004002   1004002  104173102      李四         3         5   1001002   1002309   1002102  104173102      王五         5         5   1001001   1002309   1002309   1002309   1002309

2、代码段

#include #include #include #include #include #define N sizeof(Book) #define N1 sizeof(stu) #define password "xyq" typedef struct Book//图书信息 { char kind[10];//类别 char num[10];//书号 char name[10];//书名 int out;//出借数量 int save;//未借出数量 Book *next; }Book; typedef struct stu//学生信息 { char num[10];//学号 char name[10];//姓名 int out;//已借出数量 int max;//最大借书数量 char B[5][10];//借阅书 stu *next; }stu; void login();//密码 void menu_guan();//菜单_管理员菜单 void menu_man();//菜单_用户菜单 void input_book();//录入图书 void seek_book();//查询图书 void output_book(); void output_stu(char zhanghu[10]);//图书总览 void del_book();//删除图书 void amend_book();//更改图书信息 Book *creat();//创建链表 stu *creat1(); void find_kind_book();//按类别查询 void find_name_book();//按书名查询 void all_books(); //全删数据 void M(); void jieyue(char name[10]);//借阅图书 void guihuan(char name[10]);//归还图书 void add_man();//用户注册 int main() { //system("title 图书管理系统"); system("color E0") ; char zhanghu[10]; stu *check,*p; int flag; login(); printf("\n\nFile reading complete,Please press any key to continue...\n"); getch();//waiting AA: system("cls"); M(); int t,n; while(scanf("%d",&t)!=EOF) { switch(t) { case 1: while(menu_guan(),scanf("%d",&n)!=EOF) { switch(n) { case 0:printf("end......\n");Sleep(1000);goto AA; case 1:input_book();output_book();break; case 2:amend_book();output_book();break; case 3:del_book();output_book();break; case 4:seek_book();break; case 5:output_book();break; case 6:all_books();break; default:printf("(〃>目<)请输入 0 ~ 6 的数字...");getch();break; } } break; case 2: flag=0; printf("\n\n请输入您的姓名 -> "); fflush(stdin); gets(zhanghu); check=creat1(); p=check->next; while(p) { if(strcmp(p->name,zhanghu)==0) { flag=1;break; } p=p->next; } if(flag==0) { printf("您还没有注册账号\n\n"); getch(); goto AA; } printf("登录..."); Sleep(1000); system("cls"); while(menu_man(),scanf("%d",&n)!=EOF) { switch(n) { case 0:printf("end......\n");Sleep(1000);goto AA; case 1:output_book();jieyue(zhanghu);break; case 2:output_stu(zhanghu);guihuan(zhanghu);break; case 3:output_book();break; case 4:seek_book();break; case 5:output_stu(zhanghu);break; default:printf("(〃>目<)请输入 0 ~ 5 的数字...");getch();break; } } break; case 3:add_man();goto AA;break; case 0:exit(0); default:printf("(〃>目<)请输入 1 or 2 ...");fflush(stdin);break; } } return 0; } void M() { printf("------------------------------------------------------------------\n"); printf("------------------ 1 管理员页面 ------------------\n"); printf("------------------ ------------------\n"); printf("------------------ 2 用户页面 ------------------\n"); printf("------------------ ------------------\n"); printf("------------------ 3 用户注册 ------------------\n"); printf("------------------ ------------------\n"); printf("------------------ 0 退出系统 ------------------\n"); printf("------------------------------------------------------------------\n"); } void login()//密码 { char key[N],c; int i; printf("请输入密码->__"); while(1) { fflush(stdin); i=0; while((c=getch())!=13) { if(c==8&&i>0) { printf("\b \b");//清除*号和错符 i--; continue; } if(c!=8) { key[i++]=c; putchar('*'); } } key[i]='\0'; if(strcmp(password,key)==0) return ; else printf("\none more time-> "); }//重复输入密码直到正确 } void menu_guan()//菜单 { system("cls"); printf("\n"); printf("--------------------___图书查询管理系统___--------------------\n"); printf("----- ------\n"); printf("----- 管理员系统 ------\n"); printf("----- ------\n"); printf("----- [1]新增图书 ------\n"); printf("----- [2]更改图书信息 ------\n"); printf("----- [3]删除图书 ------\n"); printf("----- [4]查找图书 ------\n"); printf("----- [5]显示所有图书信息 ------\n"); printf("----- [6]全删当前数据 ------\n"); printf("----- [0]退出 ------\n"); printf("----- ------\n"); printf("--------------------------------------------------------------\n"); } void menu_man()//菜单 { system("cls"); printf("\n"); printf("--------------------___图书查询管理系统___--------------------\n"); printf("===== ------\n"); printf("===== 用户系统 ------\n"); printf("===== ------\n"); printf("===== [1]借阅图书 ------\n"); printf("===== [2]归还图书 ------\n"); printf("===== [3]查看所有图书 ------\n"); printf("===== [4]查找图书 ------\n"); printf("===== [5]显示我的信息 ------\n"); printf("===== [0]退出 ------\n"); printf("===== ------\n"); printf("--------------------------------------------------------------\n"); } Book *creat()//创建链表 { char kind[10];//类别 char num[10];//书号 char name[10];//书名 int out;//出借数量 int save;//未借出数量 FILE *fp; //文件指针 Book *head=NULL,*tail,*p; fp=fopen("book.txt","r+"); //以只读的方式打开文件 if(fp==NULL) { printf("can not open file~\n"); } head=(Book*)malloc(N); head->next=NULL; tail=head; while(!feof(fp)) //判断文件位置标志是否移动到文件末尾 { p=(Book*)malloc(N); //向内存申请一段空间 fscanf(fp,"%s%s%s%d%d",kind,num,name,&out,&save); strcpy(p->kind,kind);strcpy(p->num,num);strcpy(p->name,name); p->out=out;p->save=save; //将fp所指向的文件中的内容赋给p p->next=NULL; tail=tail->next=p; } fclose(fp); //关闭文件 return head; //返回头指针 } stu *creat1() { char num[10];//书号 char name[10];//书名 int out;//出借数量 int max;//最大借书量 char B[5][10]; FILE *fp; //文件指针 stu *head=NULL,*tail,*p; fp=fopen("reader.txt","r+"); //以只读的方式打开文件 if(fp==NULL) { printf("can not open file~\n"); } head=(stu*)malloc(N1); head->next=NULL; tail=head; while(!feof(fp)) //判断文件位置标志是否移动到文件末尾 { p=(stu*)malloc(N1); //向内存申请一段空间 fscanf(fp,"%s%s%d%d",num,name,&out,&max); for(int i=0;iB[i],B[i]); } strcpy(p->num,num);strcpy(p->name,name); p->out=out;p->max=max; //将fp所指向的文件中的内容赋给p p->next=NULL; tail=tail->next=p; } fclose(fp); //关闭文件 return head; //返回头指针 } void input_book()//录入图书 { while(1) { system("cls"); Book *p; p=(Book *)malloc(N); printf("--------------------------------------------------------------\n"); printf("请输入想要录入的图书\n"); printf("%10s%10s%10s%10s%10s\n","类别","书号","书名","出借","未借"); scanf("%s%s%s%d%d",p->kind,p->num,p->name,&p->out,&p->save); p->next=NULL; FILE *fp; if((fp=fopen("book.txt","a+"))==NULL) { printf("can not save this file\n"); exit(0); } fprintf(fp,"%10s%10s%20s%10d%10d\n",p->kind,p->num,p->name,p->out,p->save); fclose(fp); printf("保存ing..."); Sleep(500); system("cls"); printf("--------------------------------------------------------------\n"); printf("-------------------------- 保存成功!-------------------------\n"); printf("--------------------------------------------------------------\n"); printf("---------------------1继续 0退出---------------------\n"); printf("--------------------------------------------------------------\n"); fflush(stdin); while(1) { char t; t=getch(); if(t=='1') break; else if(t=='0') { system("cls"); return ; } } } } void amend_book()//更改图书信息 { while(1) { system("cls"); Book *head,*p; char kind[10];//类别 char num[10];//书号 char name[10];//书名 int out;//出借数量 int save;//未借出数量 head=creat(); p=head->next; fflush(stdin); printf("--------------------------------------------------------------\n"); printf("请输入你想要修改的图书的书名\n"); gets(name); printf("--------------------------------------------------------------\n"); while(p&&strcmp(p->name,name)!=0) p=p->next; if(p) { printf("找到啦 ~ \n"); printf("%10s%10s%10s%10s%10s\n","类别","书号","书名","出借","未借"); printf("%10s%10s%10s%10d%10d\n",p->kind,p->num,p->name,p->out,p->save); printf("--------------------------------------------------------------\n\n"); printf("%10s%10s%10s%10s%10s\n","类别","书号","书名","出借","未借"); scanf("%s%s%s%d%d",kind,num,name,&out,&save); strcpy(p->kind,kind);strcpy(p->num,num);strcpy(p->name,name); p->out=out;p->save=save; } else { printf("未找到~");getch();return ; } FILE *fp; if(head->next!=NULL) //如果head不为空 { p=head->next; fp=fopen("book.txt","w+"); if(fp==NULL) { printf("can not open file ~"); } while(p->next) { fprintf(fp,"%10s%10s%20s%10d%10d\n",p->kind,p->num,p->name,p->out,p->save); p=p->next; } fclose(fp); } system("cls"); printf("back..."); getch(); return ; } } void del_book()//删除图书 { while(1) { char name[20]; system("cls"); FILE *fp; Book *head,*p,*pre=NULL; head=creat(); p=head->next; fflush(stdin); printf("请输入你要删除的图书的书名:"); scanf("%s",name); while(p&&strcmp(p->name,name)!=0) { pre=p; p=p->next; } if(p) { if(pre==NULL) head=head->next; else { pre->next=p->next; } } else return ; free(p); if(head->next) { p=head->next; fp=fopen("book.txt","w+"); if(fp==NULL) { printf("can not open file ~\n"); } while(p->next) { fprintf(fp,"%10s%10s%10s%10d%10d\n",p->kind,p->num,p->name,p->out,p->save); p=p->next; } fclose(fp); } system("cls"); printf("back..."); getch(); return ; } } void seek_book()//查询图书 { while(1) { system("cls"); //清屏 char t; printf(" "); printf("---------------------------图书查询-----------------------\n"); printf("\n"); printf("--------------- 1 按类别查询 ---------------\n"); printf("--------------- 2 按书名查询 ---------------\n"); printf("--------------- 0 返回 ---------------\n"); printf("----------------------------------------------------------\n"); fflush(stdin); t=getch(); switch(t) { case '0': printf("back~\n"); fflush(stdin); getch(); return ; case '1':find_kind_book();break; case '2':find_name_book();break; default :printf("(〃>目<)请输入 0 ~ 2 的数字...");getch();break; } } } void find_kind_book()//按类别查询 { system("cls"); Book *head,*p; int i=11; int flag=0; head=creat(); p=head->next; char kind[10]; printf("请输入您要查询图书的类别:"); gets(kind); printf("正在查询....\n"); Sleep(500); printf("%10s%10s%10s%10s%10s\n","类别","书号","书名","出借","未借"); while(p->next) { if(strcmp(p->kind,kind)==0) { printf("%10s%10s%10s%10d%10d\n",p->kind,p->num,p->name,p->out,p->save); flag=1; } p=p->next; } if(flag==0)printf("\n\nOh~ 没有您要找的书\n"); printf("back ~"); getch(); fflush(stdin); return ; } void find_name_book()//按书名查询 { int flag=0; system("cls"); Book *head,*p; head=creat(); p=head->next; char name[10]; printf("请输入您要查询图书的书名:"); gets(name); printf("正在查询....\n"); Sleep(500); while(p->next) { if(strcmp(p->name,name)==0) { if(flag==0) { printf("%10s%10s%10s%10s%10s\n","类别","书号","书名","出借","未借"); flag=1; } printf("%10s%10s%10s%10d%10d\n",p->kind,p->num,p->name,p->out,p->save); } p=p->next; } printf("\n\n"); if(flag==0)printf("没有找到呢~\n\n"); printf("back ~"); getch(); fflush(stdin); return ; } void output_book()//图书总览 { system("cls"); Book *head,*p; head=creat(); p=head->next; if((p->next)==NULL) { printf("书库暂时没有书哦~赶快去添加几本吧^_^\n"); getch(); return ; } printf("%10s%10s%20s%10s%10s\n","类别","书号","书名","出借","未借"); while(p->next) { printf("%10s%10s%20s%10d%10d\n",p->kind,p->num,p->name,p->out,p->save); p=p->next; } getch(); fflush(stdin); } void output_stu(char zhanghu[10])//图书总览 { system("cls"); stu *head,*p; head=creat1(); p=head->next; if(p->next==NULL) { printf("没有账户^_^\n"); getch(); return ; } printf("%10s%10s%10s%20s\n","学号","姓名","借书","最大借书量"); while(p->next) { if(strcmp(p->name,zhanghu)==0) { printf("%10s%10s%10d%20d\n",p->num,p->name,p->out,p->max); break; } p=p->next; } printf("\n书籍\n"); for(int i=0;i< p->out;i++) { printf("%10s",p->B[i]); } getch(); fflush(stdin); } void all_books() { FILE *fp; if((fp=fopen("book.txt","w+"))==NULL) { printf("删除失败 ~\n"); getch(); return ; } fclose(fp); printf("删除完毕 ~\n"); getch(); } void jieyue(char zhanghu[10]) { fflush(stdin); int flag=0; FILE *fp; Book *head,*p; head=creat(); p=head->next; fflush(stdin); char num[10]; printf("\n\n"); stu *head1,*p1; head1=creat1(); p1=head1->next; while(p1->name&&strcmp(p1->name,zhanghu)!=0) p1=p1->next; if(p1->out>=p1->max) { printf("满啦 借不了啦~\n"); getch(); return ; } printf("----------------------------------------------------------\n"); printf("想借哪本书嘞?(请输入书号) \n"); gets(num); while(p->next&&strcmp(p->num,num)!=0) p=p->next; if(p->next)flag=1; if(p->save==0&&p->next) { printf("这本书借完啦~~"); getch(); return ; } strcpy(p1->B[p1->out],p->num); p->out++; p->save--; p1->out++; if(head->next) { p=head->next; if((fp=fopen("book.txt","w+"))==NULL) printf("can not open file ~\n"); while(p->next) { fprintf(fp,"%10s%10s%10s%10d%10d\n",p->kind,p->num,p->name,p->out,p->save); p=p->next; } fclose(fp); } p1=head1->next; printf("----------------------------------------------------------\n"); printf("\n\n"); if(flag==0){ printf("没有找到呢~\n\n");getch();return ; } else printf("借阅成功~~\n\n"); fp=fopen("reader.txt","w+"); if(fp==NULL) { printf("can not open file ~\n"); } while(p1->next) { fprintf(fp,"%10s%10s%10d%10d",p1->num,p1->name,p1->out,p1->max); for(int i=0;iout;i++) fprintf(fp,"%10s",p1->B[i]); fprintf(fp,"%c",'\n'); p1=p1->next; } fclose(fp); printf("back ~\n"); printf("----------------------------------------------------------\n"); getch(); } void guihuan(char zhanghu[10]) { int flag=0; int i,j,k; fflush(stdin); printf("----------------------------------------------------------\n"); stu *head1,*p1; char num[10]; head1=creat1(); p1=head1->next; while(p1->name&&strcmp(p1->name,zhanghu)!=0) p1=p1->next; if(p1->out==0) { printf("你没有借的书哦~"); getch(); return ; } printf("想归还哪本书呢?(输入书号) \n"); gets(num); for(j=0;jout&&strcmp(p1->B[j],num)==0;j++); for(i=0,k=0;iout)-1;i++) { if(i!=j) strcpy(p1->B[k++],p1->B[i]); } p1->out--; FILE *fp; Book *head,*p; head=creat(); p=head->next; while(p->next&&strcmp(p->num,num)!=0) p=p->next; if(p->next)flag=1; p->out--; p->save++; if(head->next) { p=head->next; if((fp=fopen("book.txt","w+"))==NULL) printf("can not open file ~\n"); while(p->next) { fprintf(fp,"%10s%10s%10s%10d%10d\n",p->kind,p->num,p->name,p->out,p->save); p=p->next; } fclose(fp); } p1=head1->next; printf("----------------------------------------------------------\n"); printf("\n\n"); if(flag==0){ printf("没有找到呢~\n\n");getch();return ; } else printf("归还成功~~\n\n"); fp=fopen("reader.txt","w+"); if(fp==NULL) { printf("can not open file ~\n"); } while(p1->next) { fprintf(fp,"%10s%10s%10d%10d",p1->num,p1->name,p1->out,p1->max); for(int i=0;iout;i++) fprintf(fp,"%10s",p1->B[i]); fprintf(fp,"%c",'\n'); p1=p1->next; } fclose(fp); printf("back ~\n"); printf("----------------------------------------------------------\n"); getch(); } void add_man() { system("cls"); stu *p; p=(stu *)malloc(N1); printf("----------------------------------------------------------\n"); printf("请输入您的注册信息\n"); printf("%10s%10s\n","学号","姓名"); scanf("%s%s",p->num,p->name); p->next=NULL; FILE *fp; if((fp=fopen("reader.txt","a+"))==NULL) { printf("can not save this file\n"); exit(0); } fprintf(fp,"%10s%10s%10d%10d\n",p->num,p->name,0,5); fclose(fp); printf("保存ing..."); Sleep(500); system("cls"); printf("--------------------------------------------------------------\n"); printf("------------------------- 注册成功!-------------------------\n"); printf("--------------------------------------------------------------\n"); printf("-------------------------0 确认并退出-------------------------\n"); printf("--------------------------------------------------------------\n"); fflush(stdin); while(1) { char t; t=getch(); if(t=='1') break; else if(t=='0') { system("cls"); return ; } } }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3